Security News
vlt Debuts New JavaScript Package Manager and Serverless Registry at NodeConf EU
vlt introduced its new package manager and a serverless registry this week, innovating in a space where npm has stagnated.
agent-base
Advanced tools
The agent-base package is a module for Node.js that allows you to create custom HTTP/HTTPS Agents. It is used to implement custom proxying behavior, connection pooling, and other HTTP client enhancements. It provides a simple way to extend the core `http.Agent` class to customize the behavior of HTTP requests.
Custom HTTP Agent
This feature allows you to create a custom HTTP agent by providing a function that handles HTTP requests. The function can perform custom logic and must return a stream, socket, or an existing agent.
const agent = require('agent-base');
function myAgent(request, options) {
// Custom logic for handling HTTP requests
return new Promise((resolve, reject) => {
// Resolve with a custom stream, socket, or an existing agent
resolve(myCustomStreamOrSocket);
});
}
module.exports = agent(myAgent);
HTTPS Agent with Custom Certificate
This feature demonstrates how to create an HTTPS agent with a custom certificate. The agent is created by extending the `https.Agent` class and adding custom options, such as SSL key and certificate.
const agent = require('agent-base');
const https = require('https');
const fs = require('fs');
const options = {
key: fs.readFileSync('key.pem'),
cert: fs.readFileSync('cert.pem')
};
const httpsAgent = agent((req, opts) => {
return new Promise((resolve, reject) => {
opts = Object.assign({}, opts, options);
resolve(new https.Agent(opts));
});
});
module.exports = httpsAgent;
The http-proxy-agent package provides an HTTP Agent implementation that connects to a specified HTTP proxy server. It is similar to agent-base in that it allows you to customize the behavior of HTTP requests, but it is specifically designed for proxying.
Similar to http-proxy-agent, https-proxy-agent is an HTTPS Agent implementation for proxying HTTPS requests. It provides similar functionality to agent-base but is tailored for HTTPS connections through a proxy server.
The socks-proxy-agent package is an HTTP Agent that connects to a SOCKS proxy server. It is another example of a package that extends the functionality of the core HTTP Agent, similar to agent-base, but with a focus on SOCKS proxy support.
http.Agent
instanceThis module is a thin wrapper around the base http.Agent
class.
It provides an abstract class that must define a connect()
function,
which is responsible for creating the underlying socket that the HTTP
client requests will use.
The connect()
function may return an arbitrary Duplex
stream, or
another http.Agent
instance to delegate the request to, and may be
asynchronous (by defining an async
function).
Instances of this agent can be used with the http
and https
modules. To differentiate, the options parameter in the connect()
function includes a secureEndpoint
property, which can be checked
to determine what type of socket should be returned.
Here are some more interesting uses of agent-base
.
Send a pull request to list yours!
http-proxy-agent
: An HTTP(s) proxy http.Agent
implementation for HTTP endpointshttps-proxy-agent
: An HTTP(s) proxy http.Agent
implementation for HTTPS endpointspac-proxy-agent
: A PAC file proxy http.Agent
implementation for HTTP and HTTPSsocks-proxy-agent
: A SOCKS proxy http.Agent
implementation for HTTP and HTTPSHere's a minimal example that creates a new net.Socket
or tls.Socket
based on the secureEndpoint
property. This agent can be used with both
the http
and https
modules.
import * as net from 'net';
import * as tls from 'tls';
import * as http from 'http';
import { Agent } from 'agent-base';
class MyAgent extends Agent {
connect(req, opts) {
// `secureEndpoint` is true when using the "https" module
if (opts.secureEndpoint) {
return tls.connect(opts);
} else {
return net.connect(opts);
}
}
});
// Keep alive enabled means that `connect()` will only be
// invoked when a new connection needs to be created
const agent = new MyAgent({ keepAlive: true });
// Pass the `agent` option when creating the HTTP request
http.get('http://nodejs.org/api/', { agent }, (res) => {
console.log('"response" event!', res.headers);
res.pipe(process.stdout);
});
FAQs
Turn a function into an `http.Agent` instance
The npm package agent-base receives a total of 64,718,559 weekly downloads. As such, agent-base popularity was classified as popular.
We found that agent-base demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
vlt introduced its new package manager and a serverless registry this week, innovating in a space where npm has stagnated.
Security News
Research
The Socket Research Team uncovered a malicious Python package typosquatting the popular 'fabric' SSH library, silently exfiltrating AWS credentials from unsuspecting developers.
Security News
At its inaugural meeting, the JSR Working Group outlined plans for an open governance model and a roadmap to enhance JavaScript package management.